package edu.njust.cma.service;

import edu.njust.cma.DTO.LabTaskJson;
import edu.njust.cma.pojo.SubtaskAdditionalRequirement;
import edu.njust.cma.pojo.SubtaskFacilityComparisonInspect;
import edu.njust.cma.DTO.TaskDecomposeRequestJSON;
import edu.njust.cma.pojo.*;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

@Service
public interface TaskService {
    // 获取某个子项目所有任务
    List<Task> getTask(Integer smallProjectId) ;
    // 获取某个任务的所有子任务-人员任务
    Map<SubtaskStaff, User> getStaffTask(Integer taskId);
    // 获取某个任务的所有子任务-设备任务
    Map<SubtaskEquipment, Equipment> getSubtaskEquipment(Integer taskId);
    // 获取某个任务的所有子任务-样品任务
    SubtaskSample getSubtaskSample(Integer taskId);
    // 获取某个任务的所有子任务-额外要求任务
    List<SubtaskAdditionalRequirement> getSubtaskAdditionalRequirement(Integer taskId);
    // 获取某个任务的所有子任务-设施任务
    SubtaskFacilityComparisonInspect getSubtaskFacility(Integer taskId);
    // 获取某个任务的所有子任务-对比任务
    SubtaskFacilityComparisonInspect getSubtaskComparison(Integer taskId);
    // 获取某个任务的所有子任务-检查任务
    SubtaskFacilityComparisonInspect getSubtaskInspect(Integer taskId);
    // 获取某个任务的所有子任务-模拟任务
    SubtaskSimulation getSubtaskSimulation(Integer taskId);
    // 分解任务
    Boolean decomposeTask(TaskDecomposeRequestJSON taskDecomposeRequestJSON);

    // 审核子任务给予通过
    void checkTaskPass(Submission submission);

    // 审核子任务给予不通过
    void checkTaskFail(Submission submission);

    List<LabTaskJson> getTasksUnDecompose(int userId);

    List<LabTaskJson> getTasksUnSubmit(int labHeadUserId);

    List<LabTaskJson> getsTasksUnCheck(int labHeadUserId);

    List<LabTaskJson> getTasksFinished(int labHeadUserId);

    SubtaskAdditionalRequirement getSubtaskAdditionalRequirementBySubtaskId(Integer subtaskId);
}
